import {Component} from "vue";

export interface VjsonComponentOptions {
    /**
     * 组件类型
     */
    cmptype: string

    /**
     * 帮助文件路径
     */
    help?: string

    /**
     * 运行时组件
     */
    runtime?: Component

    /**
     * 设计时组件
     */
    designer?: Component
}

export interface ToolboxOptions {
    /**
     * 工具箱组件名称
     */
    text: string

    /**
     * 工具箱所属分组
     */
    category: string

    /**
     * 工具箱中的排序
     */
    order: number
}


export interface VjsonPropertyOptions {
    /**
     * 属性描述
     */
    desc: string

    /**
     * 属性编辑器
     */
    editor?: string

    /**
     * 下拉框类型
     */
    options?: { text: any, label: string }[]

    /**
     * 属性是否允许绑定
     */
    bindable?: boolean

    /**
     * 属性所属分组
     */
    category?: string
}

export interface VjsonEventOptions {
    /**
     * 事件描述
     */
    desc: string

    /**
     * 事件类别
     */
    category: string
}

export interface VjsonEventArgOptions {
    /**
     * 参数名称
     */
    name: string

    /**
     * 参数描述
     */
    desc: string
}

export interface VjsonComponentMethodOptions {
    /**
     * 参数描述
     */
    desc: string
}

export function VjsonComponentMethod(option: VjsonComponentMethodOptions) {
    return function (target: Object, methodName: string, descriptor: PropertyDescriptor): void {
        console.log('VjsonComponentMethod', target, methodName, descriptor);
    }
}

export function VjsonComponent(options: VjsonComponentOptions) {
    return function (target: Object): void {
        console.log('VjsonComponent', target, options);
    }
}

export function Toolbox(options: ToolboxOptions[]) {
    return function (target: Object): void {
        console.log('Toolbox', target, options);
    }
}

export function VjsonParam(option: VjsonEventArgOptions) {
    return function (target: Object, propertyKey: string, parameterIndex: number): void {
        console.log('VjsonParam', target, propertyKey, parameterIndex);
    }
}